home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / SCAN.XPL < prev    next >
Text File  |  2001-09-30  |  3KB  |  126 lines

  1. \SCAN.XPL    JUN-22-88    For Apex, V1.8
  2. \This program scans for bad blocks. If it gets a read error, it will
  3. \ reread the current sample one block at a time to determine the exact
  4. \ block that is bad.
  5.  
  6. \REVISION HISTORY:
  7. \JAN-85, Original
  8. \JUN-88, Modified trap handling for Amiga
  9.  
  10. code    RESERVE=3, SWAP=4, RESTART=6, CHIN=7, CHOUT=8, CRLF=9, INTIN=10,
  11.     INTOUT=11, TEXT=12, OPENI=13, TRAP=17, SPACE=18, ERRFLG=22, READ=31;
  12.  
  13. int    I, J, BLOCK, UNIT, RDSIZ, BUFSIZ, DONE, SOFT, SINGLE
  14.     ENDBLK,        \LAST BLOCK NUMBER OF AREA TO BE SCANNED
  15.     SAMPSIZ,    \NUMBER OF 256-BYTE BLOCKS PER SAMPLE
  16.     SIZMAX,        \MAX NO. OF BLOCKS IN A SAMPLE
  17.     SOFTERR, HARDERR;    \COUNT OF SOFT AND HARD ERRORS
  18. addr    BUFFER;
  19.  
  20. def    BEL=$07;
  21.  
  22.  
  23.  
  24. proc    BEEP(N);        \BEEP THE SPEAKER
  25. integer N,I;
  26. for I:=1,N do CHOUT(0,BEL);
  27.  
  28.  
  29.  
  30. proc    ERROR(STR);
  31. addr    STR;
  32. begin
  33. CHOUT(0,BEL);
  34. TEXT(0, "NOPE - ");
  35. TEXT(0, STR);
  36. CRLF(0);
  37. end;    \ERROR
  38.  
  39.  
  40.  
  41. begin    \MAIN
  42. BUFSIZ:=SPACE-200;        \?? -100 DIDN'T WORK HERE, MEMORY FULL
  43. BUFFER:=RESERVE(BUFSIZ);
  44.  
  45. TRAP(false);        \WE'LL HANDLE ANY ERRORS
  46. I:=ERRFLG;        \FLUSH ANY POSSIBLE ERRORS
  47.  
  48. TEXT(0, "-- BAD BLOCK SCANNER, V1.8x2 --
  49. ");
  50. loop    begin
  51.     TEXT(0,"UNIT? "); UNIT:=INTIN(0);
  52.     if UNIT>=0 & UNIT<=7 then quit;
  53.     ERROR("BAD UNIT NUMBER");
  54.     end;
  55.  
  56. loop    begin
  57.     TEXT(0,"START AND END BLOCKS? ");
  58.     BLOCK:=INTIN(0);
  59.     ENDBLK:=INTIN(0);
  60.     if ENDBLK < BLOCK then ERROR("WRONG ORDER")
  61.     else quit;
  62.     end;
  63. ENDBLK:=ENDBLK+1;    \POINT TO BLOCK AFTER THE LAST BLOCK TO TEST
  64.  
  65. SIZMAX:=SWAP(BUFSIZ) & $00FF;    \(DIV BY 256, NOTE: BUFSIZ MAY BE >= $8000)
  66. TEXT(0,"SAMPLE SIZE (1-"); INTOUT(0,SIZMAX); TEXT(0," BLOCKS)? ");
  67. SAMPSIZ:=INTIN(0);
  68. if SAMPSIZ<1 then SAMPSIZ:=1;
  69. if SAMPSIZ>SIZMAX then SAMPSIZ:=SIZMAX;
  70.  
  71. CRLF(0);
  72. RDSIZ:=SAMPSIZ;
  73. DONE:=false;
  74. SOFTERR:=0; HARDERR:=0;
  75. loop    begin
  76.     if BLOCK+RDSIZ > ENDBLK then
  77.         [RDSIZ:= ENDBLK-BLOCK; DONE:=true];
  78.     if RDSIZ<=0 then quit;
  79.  
  80.     READ(UNIT,BLOCK,BUFFER,RDSIZ);
  81.  
  82.     if ERRFLG then 
  83.         begin
  84.         BEEP(1); SOFT:=true;
  85.         TEXT(0,"*** BAD BLOCK FLAGGED..."); CRLF(0);
  86.         for I:=0,RDSIZ-1 do
  87.             begin
  88.             READ(UNIT,BLOCK+I,BUFFER,1);
  89.             if ERRFLG then
  90.                 [BEEP(1); TEXT(0,"    *** BLOCK ");
  91.                 INTOUT(0,BLOCK+I);
  92.                 TEXT(0," IS BAD ***"); CRLF(0);
  93.                 SOFT:=false;
  94.                 HARDERR:=HARDERR+1]
  95.             else     [TEXT(0,"    BLOCK ");
  96.                 INTOUT(0,BLOCK+I);
  97.                 TEXT(0," IS OK"); CRLF(0)];
  98.             end;
  99.         BLOCK:=BLOCK+RDSIZ;
  100.  
  101.         if SOFT then 
  102.             [TEXT(0,"    ERROR NOT SEEN 2ND TIME THROUGH");
  103.             CRLF(0);
  104.             SOFTERR:=SOFTERR+1];
  105.  
  106.         end
  107.     else    begin
  108.         TEXT(0,"BLOCKS "); INTOUT(0,BLOCK);
  109.         CHOUT(0,^-);
  110.         BLOCK:=BLOCK+RDSIZ; 
  111.         INTOUT(0,BLOCK-1); TEXT(0," ARE OK"); CRLF(0);
  112.         end;
  113.  
  114.     if DONE then quit;
  115.     end;    \loop
  116.  
  117. case of
  118.   HARDERR>0:    TEXT(0,"*** BAD BLOCKS");
  119.   SOFTERR>0:    TEXT(0,"SOFT ERRORS")
  120. other        TEXT(0,"NO ERRORS");
  121. TEXT(0," WERE DETECTED"); CRLF(0);
  122. CRLF(0);
  123. RESTART;    \(A 'LOOP' WOULD NOT REINITIALIZE ARRAY SPACE)
  124. end;    \MAIN
  125.  ERRORS");
  126. TEXT(0," WERE DETEC